{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Indexing và Slicing\n",
    "----\n",
    "\n",
    "Indexing và Slicing tương tự với list trong Python. Xem lại [bài trước](https://github.com/bangoc123/learn-machine-learning-in-two-months/blob/master/python-tutorials/list.ipynb).\n",
    "\n",
    "Phần này rất nhiều cách làm nhưng tôi chỉ trình bày các cách dễ hiểu và thực tế hay dùng nhất.\n",
    "\n",
    "Bạn có thể tham khảo chi tiết [tại đây](https://docs.scipy.org/doc/numpy-1.13.0/reference/arrays.indexing.html)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### I. Indexing Cơ Bản"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![2d Matrix](https://lh3.googleusercontent.com/Ub091slTLEyIhT5JBxuX9d4lYe3JogFxTZeVGm-BA9wFiloKWlTfUK4e534BnEJ_m5g2a3L88rRxwxylW2xmN9lpFbAqKQcQmsW_AzaGQqeC-YAM_kFrzVaxVY9n3o9jgNTyyknRMcfwtT0EjKJoHATSMJJVDsSEQ5Av7I9KMIXyACsqH8HpO-wAWd9ITTXGBXKK_-aN2k0a_I65e20ZvxooYRnXuS6fL94dqVW8VAE8jpnu1FiwX-y4rmJJS4OP80OQV4u_iH13GJY2VwN8VCS2Mz_qxgvYZ6UE29raUmFMOhHv8K0RgTIgDuoouMDNt73oOpV37Z70SNKUXdGXLavzk3SQwuJpvAyM6J2hzPcwIqS0K6uXXKbEDMV9yIVqkJTkayvKk4H3wo6WgGYNiiOMwRIkDY8lb4aOs3qrJBNFqBfcZtA4-5mxX2FhosE-rD0Yr-c48Cs3ylgjbi8I7iaBbp4UPC6Gx6beZbdzSDUMsIkQcsEW5rrmLJh94TAU8sBAnNY8aCiUuEqAyAMSTBnajDSW0HI2qii8QJw2k54ESqr1gaasJMmrU_MW4IFFpRuZ8c3_bq6fYpK3GFbQjWlKi60p6xBUE1oZDkcSC7YnVUGZMkyft7ubqyECazlA9Ixy_I6amTL62GIeRIsLQBSx-YIT22x9fA=w445-h222-no)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Mảng 2 chiều. Chúng ta có thể liên tưởng đến ma trận 2 chiều. \n",
    "\n",
    "Việc mô phỏng ma trận nhiều chiều của NumPy dựa trên việc sử dụng  **list bên trong list (nested list)** cho nên việc truy cập các phần tử trong mảng này hoàn toàn tương tự như chúng ta đã thực hiện trong Python."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "number_2D = np.array([[4,5,6], [7, 8, 9]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[4, 5, 6],\n",
       "       [7, 8, 9]])"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "number_2D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(2, 3)"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "number_2D.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 1. Truy cập hàng"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### a. Truy cập hàng đầu tiên của ma trận"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([4, 5, 6])"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "number_2D[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### b. Truy cập hàng cuối cùng của ma trận"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([7, 8, 9])"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "number_2D[-1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 2. Truy cập cột"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### a. Truy cập cột đầu tiên của ma trận\n",
    "Việc này tương đương với truy cập tất cả các hàng và lấy phần tử đầu tiên"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([4, 7])"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "number_2D[:, 0] # -> Dấu : biển hiện việc duyệt qua tất cả các hàng, qua mỗi hàng ta lấy phần tử đầu tiên"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### b. Truy cập cột cuối cùng của ma trận"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([6, 9])"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "number_2D[:, -1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### c. Truy cập cột giữa của ma trận"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([5, 8])"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "number_2D[:, 1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 3. Truy cập mảng trong ma trận"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Matrix](https://lh3.googleusercontent.com/pxLKL0NUTZMwxXULMx0C6oWO2f5ysUd2egfi684gIF7hPPgaW6mwj5qF9jkqhJlEkT7MSfL9EaXJ1ygUsm0zqk4IjsZ6WHAvha76gz0qql_zeMoLU_HKvIU_4qVOCzny_6Zugp7NnKA9vLYThpWznMWxNdZPK5WjG6PLWGFMMS0mekVbLxHXWAmqNHln13Mt4dZfs8BJIzDnZolx9ntYH7v_0QezyZyXZIGKs_4UHTNTWK2pbe8ynVKgm2eTtUiZB0wrPzawRHRfbmuaiLuQ7b7zR2AYErfKvAzmH8DIo5V2dBxrxNjiyQaMWjWS-wzHthWAf71ZAx1VidbOmoRJTkRMFsxcFJ6xzn35ohFw7VnJpUkp2gNcLd0Lxv4gNphZQX6JV4ZEzKzZuTCBJ7-2C-ZIyyGRNIIfCGSYsZgWQEl23BUg_zxTYnzsL3pn44FHzyJxYpZkZd_JJ50SzH1G514hCC28Z67sO9_HfeHrl5seOd73nZk6j2Nnli5x4d09QaH3FiAMBWHb6JcroRs0RvAwbyNGGwiAbm-JTucXTP3sq6yhH6KZQM1SeeidiUdoKzxKdRihWo6ush0zUC-yumQIz4DUJEYrnKMT2bNnhj2Ml2OT_K1tf2RGtKdpGoxWT-LsAv75B3ERebwxIqPv3Z0J6jF2WSdBmw=w445-h222-no)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "awesome = np.array([\n",
    "    [1, 2, 3, 4, 5, 6, 7],\n",
    "    [8, 9, 4, 5, 8, 9, 0],\n",
    "    [2, 9, 7, 8, 0, 4, 5],\n",
    "    [9, 6, 4, 9, 3, 7, 2],\n",
    "])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4, 7)"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "awesome.shape # -> Một ma trận 4 hàng 7 cột"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Các bước tiến hành\n",
    "    - Truy cập hàng 2 và hàng 3 thông qua chỉ mục 1 và 2\n",
    "    - Truy cập cột 2 và cột 3 của 2 hàng trên thông qua chỉ mục 2 và 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[4, 5],\n",
       "       [7, 8]])"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "awesome[1:3, 2:4]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 4. Truy cập phần tử"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### a. Truy cập phần tử hàng 1 cột 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](https://lh3.googleusercontent.com/hiL24e8ADYL-IxeNWn-5y9IviYq2flpf1QwCYN504gdKlWiLuU7tWVBpeYvoGWhr_st-7azNSuON6s5JOUNWgVISzDFbhbHbCoFK8SUbfYd4oDkwiqIvJu3mlCYOMzXmb6YUkGc86WADp6oYWImqGocnUOEe4MGFgXp3L9YPOhYq6blI_287s3biSbfS3s-WNsa87wCahmJpg9jH_wSpMOfmJJ3H4t3MSVOZKlFbRKLSor6_39zTDgMcAeALi7s_83gaPudasCsmHI-JtfN2XpV0rP0ZOTmrDg3A9SOn3cfEwe0RBtoICJx_YWGIp65lJmvKmIknqZiQCwlTprfa3WhlWhEXTiX1zA4813WxA_xbinSHUEo8dhpf28w0Dei9LzSx6C9mt74KsxqvyUlEomqT3DqZ70z1qk1YIZiDQHTOTFWKYBb5vWeLf6Ep-ro1wR5BjrmzAvl2e0xSUJX-4ojnp8sR4FeGUE4wp0Fl_RcGoB59yGhCbm7LOZHOy6_-eCSuuKkmIDFeRHHs6lYtQX8goRH7NXM7ywV_CsufTIqEdycYKRiipbir0ip2i-zuHp1csvoETgk8Ih5P1-nOnWbwzfSx8GAlvE4asLkuWxnQHyRx_LmoR4nDQbfmpxf_i9rRPf0unLu0e3XL52Zei_VXUIkBz8NbvQ=w445-h222-no)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Các bước tiến hành:\n",
    "    - Truy cập hàng 1 thông qua chỉ mục là 0\n",
    "    - Truy cập phần tử cột 2 hàng 1 thông qua chỉ mục là 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "awesome[0, 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Tương đương với\n",
    "awesome[0][1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### b. Truy cập phần tử hàng 2 cột 3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](https://lh3.googleusercontent.com/o8aJwfEiYr0PuhFO2Dd1dj1I9rlvNk-w0OG12Z5a-OpUt0fpMHTO-JejM2ljn5hlZI5DaHY7Hhv_TR5-qPwWtfOyWWBQ2Ut8Iuiy_5ksmC_c2GARBVN-0rpCERKb4Anp2ieUY1R1N4JBWFNFSL3z4V3O55q3-embqrXChbnVMl9VzQFXUKOwTrWn7lYEMOgxNNQElY4nGmfOBFTVc3ZpNGJF968xwvyV2e1W-3v2IGqluN8TDO08euNSek7GsiP7aFhB6LIBKnkiOXYH8rPcpDyUjB2Coc8d4hf0_TQKMoiZA5Xki5meL0IsRZWk1wYTotMSMbr-znGrAKv_pWGFb7ti3eFazkwdavyGr2YKlq3qJsg2cvRpaL76VxKeK4mdu6l3Wj7VpqL2GJWFuE9KsYx7RauzeKN0h2bgIu4sASBmZ8RIhVJMAqZK3hxi9eEl55_StyQZ5WtsKBFSoz6urxqfSGcMPAKEjjl8JDg6jGvyn0uECXMfTgWBUXURGTslauyvQw2RIlt9axMG_mHXgmT5kWSewlZc-68FiFW5igB_ilMOD8Kbfs7J-Uyhtw6jsNzo83cIaVUI8hUGUcHMCEKmYeJA2fhSmflS4BI06vh2GpGswzHrN5Rrb6PA9YFwyw4SbjcDeVMoFLiOxv0aX4LjV4lIk9IYYg=w445-h222-no)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Các bước tiến hành:\n",
    "    - Truy cập hàng 2 thông qua chỉ mục là 1\n",
    "    - Truy cập phần tử cột 3 hàng 2 thông qua chỉ mục là 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "awesome[1, 2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Tương đương với\n",
    "awesome[1][2]"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
